

package pe.edu.pucp.DAO;
import pe.edu.pucp.views.*;
import java.sql.*;
import java.util.ArrayList;
import pe.edu.pucp.bean.Servicio;



public class MSAccessDAOServicio implements DAOServicio {
    
    public static final int idcontxserv=1;
    
    
    @Override
    public ArrayList<Servicio> queryAll() {
                    
             ArrayList <Servicio> servicioList = new ArrayList<Servicio>();

            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
    try {
            //1. Se registra el driver de la BD
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM SERVICIO");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
               String id = rs.getString("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float preciobase = rs.getFloat("PRECIO_BASE"); 
                String unidadcobro = rs.getString("UNIDAD_COBRO");
               
               
                Servicio s = new Servicio(id,descripcion,preciobase,unidadcobro);
                servicioList.add(s);
            }               
        } catch (ClassNotFoundException | SQLException ex) {
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){}  
        } 
    
   return servicioList;   
  
}

    @Override
    public int insert(Servicio s) {
         int result =0;
          int idservicio=0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        PreparedStatement pstmt2 = null;
        ResultSet rs2 = null;
        try {
           //1. Se registra el driver de la BD
                         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = null;
            pstmt2 = conn.prepareStatement("SELECT top 1 IDSERVICIO FROM SERVICIO ORDER BY IDSERVICIO DESC");
            rs2 = pstmt2.executeQuery();
            if (rs2.next()){
               idservicio = 1+rs2.getInt("IDSERVICIO");                        
            }
            rs2.close();
            
              SQLString =
                    "INSERT INTO SERVICIO(descripcion,"
                    + "precio_base,unidad_cobro) "
                    + "VALUES(?,?,?)";
                pstmt = conn.prepareStatement(SQLString);
                s.setId(String.valueOf(idservicio));
              // pstmt.setString(1,s.getId());
                pstmt.setString(1, s.getDescripcion());
                pstmt.setString(2, String.valueOf(s.getPreciobase()));
                pstmt.setString(3, s.getUnidadcobro());
                
                                
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){}  
        } 
        return result;
    }

    @Override
    public int update(Servicio s) {
        int result=0;
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        String cadI,cadB,cadD,cadC = null;
        
        cadI=s.getId();
        cadB=Float.toString(s.getPreciobase());
        PanelServicioEditar ps=new PanelServicioEditar();
        
        if (ps.variable==1){
            cadC="Dolares";}
        else if (ps.variable==0) cadC="Soles";
            cadD=s.getDescripcion();
            try{
           //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            con = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="UPDATE SERVICIO SET DESCRIPCION ='"+cadD+
                       "',PRECIO_BASE ="+cadB+",UNIDAD_COBRO ='"+cadC+"' WHERE IDSERVICIO ="+cadI+"";
            
            pstmt = con.prepareStatement(SQLString);
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
               // throw new Exception();
            }   
        }catch (Exception ex) {
            //ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
      return result;
    
    }
    

    @Override
    public int delete(String idServicio) {
         int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
             //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = 
                    "DELETE FROM SERVICIO WHERE IDSERVICIO = "+idServicio+"";                
            pstmt = conn.prepareStatement(SQLString);                    
            result =  pstmt.executeUpdate();            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){}  
        } 
        return result;     
    }
    
     @Override
    public Servicio queryByIdS(String id) {
          Servicio s= new Servicio();        
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
             //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="SELECT * FROM SERVICIO WHERE IDSERVICIO = "+id+"";
            pstmt = conn.prepareStatement(SQLString);      
            rs =  pstmt.executeQuery();
            
            while (rs.next()){
                String idserv = rs.getString("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                s.setId(idserv);
                s.setDescripcion(descripcion);
                s.setPreciobase(pbase);
                s.setUnidadcobro(unidad);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return s;
    }

    @Override
    public ArrayList<Servicio> queryByNS(String cad) {
         ArrayList <Servicio> servList = new ArrayList<Servicio>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
            try {
              //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM SERVICIO WHERE DESCRIPCION LIKE '%"+cad+"%'");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                String idserv = rs.getString("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                Servicio s = new Servicio(idserv,descripcion,pbase,unidad);
                servList.add(s);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
            return servList;        
    }

    @Override
    public int insertServxCont(int idServ, int idCont) {
         int result=0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        try {
             //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            
            conn = DriverManager.getConnection(connectionUrl);
            
            String SQLString = null;
            
            SQLString = "INSERT INTO SERVICIOXCONTENEDOR(IDCONTENEDOR, IDSERVICIO)"
                        + "VALUES(?,?)";
            
            pstmt = conn.prepareStatement(SQLString);
            pstmt.setString(1,Integer.toString(idCont) );
            pstmt.setString(2,Integer.toString(idServ) );
       
            
            result =  pstmt.executeUpdate();
            
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        }
        
        return result;
    }

    @Override
    public ArrayList<Servicio> queryAllServxCont(String id) {
        
         ArrayList<Servicio> serviciosList = new ArrayList<Servicio>();
        Connection conn = null;
            PreparedStatement pstmt = null;
            PreparedStatement pstmt2=null;
            PreparedStatement pstmt3=null;
            ResultSet rs = null;
            ResultSet rs2=null;
            ResultSet rs3=null;
        
        
        try{
              //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
                pstmt = conn.prepareStatement("SELECT s.IDSERVICIO,s.DESCRIPCION,s.PRECIO_BASE,s.UNIDAD_COBRO"
                                             +" FROM SERVICIO s ,SERVICIOXCONTENEDOR sxc "
                                             +" WHERE  sxc.IDCONTENEDOR="+id+" AND s.IDSERVICIO=sxc.IDSERVICIO");
                rs =  pstmt.executeQuery();
                
                while (rs.next()){
               String idserv = rs.getString("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                Servicio s = new Servicio(idserv,descripcion,pbase,unidad);
                serviciosList.add(s);
            }
            
        }catch(Exception ex){
                ex.printStackTrace();
            }finally{
                 //5. Se cierra la conexión
                try {if (rs != null) rs.close(); }
                 catch(Exception e){
                     e.printStackTrace();
                 }
            }
        
        return serviciosList;
    }

    @Override
    public ArrayList<Servicio> queryAllSerxDoc(String idDoc) {
         ArrayList<Servicio> serviciosList = new ArrayList<Servicio>();
        Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;          
        
        
        try{
              //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            
            
                pstmt = conn.prepareStatement("SELECT s.IDSERVICIO,s.DESCRIPCION,s.PRECIO_BASE,s.UNIDAD_COBRO"
                                             +" FROM SERVICIO s ,SERVICIOXDOCUMENTO sxd "
                                             +" WHERE  sxd.IDDOCUMENTO" + "="+idDoc+" AND s.IDDOCUMENTO=sxc.IDDOCUMENTO");
                rs =  pstmt.executeQuery();
                
                while (rs.next()){
                String idserv = rs.getString("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                Servicio s = new Servicio(idserv,descripcion,pbase,unidad);
                serviciosList.add(s);
            }
            
        }catch(Exception ex){
                ex.printStackTrace();
            }finally{
                 //5. Se cierra la conexión
                try {if (rs != null) rs.close(); }
                 catch(Exception e){
                     e.printStackTrace();
                 }
            }
        
        return serviciosList;
   }
    
    
    

}
    
    
